Software testing tends to consume a substantial portion of total software development effort, and software maintenance can amount to up to 60% of life cycle costs. A common problem in both software testing and maintenance is deficient documentation, wherein the documentation is often non-existent, inadequate or outdated. These deficiencies can occur for a number of reasons, including inadequate analysis and design effort, requirements changes and changes to code, wherein corresponding updates to the design are not made. Design recovery from object-oriented (OO) programs such as JAVA™ by Sun Microsystems and C++ has been proposed, as a means to obtain design information when accurate documentation is not available. Previously, techniques have been proposed for reverse engineering JAVA™ and C++ programs to uncover static relationships among objects, such as inheritance, aggregation and association, member function control and data flow relationships, and object state dependent behavior. Reverse engineering is generally the process of analyzing a subject to identify system components and their relationships, and to create representations of a system in another form at a higher level of abstraction.
Object-Oriented Technologies Works (OOTWorks) is a tool that uses the reverse engineering approach to help analyze, test, and maintain object-oriented software. It contains three kinds of diagrams. They are Object Relation Diagram (ORD), Block Branch Diagram (BBD), and Object State Diagram (OSD). ORD is used to display class relationships, BBD is used to represent the structure of a member function within a class, and OSD is used to display the state dependent behaviors of objects.
Object Relation Diagram not only can represent the relations between classes, but also can generate automated test schedule, test order, and identify the ripple effect to save time and effort in regression testing.
BBD (Block Branch Diagram) is a reverse engineering tool that displays the control structure and the interfaces of a member function. Besides the structure of a member function, Block Branch Diagram also shows the independent basis paths in the method. It also helps identify the complexity of a method. Like ORD, it can generate the test case based on the basis paths it found.
The three tools of OOTWorks offer tests from different levels. ORD tests at class level. BBD tests at the class member function level. OSD tests at the class data member level based on the different states of the objects. The reverse-engineering tool, SDG, is added to become another integral part of the toolset.
Objects in an OO program interact with each other to accomplish a business task. The objects are instances of respective object classes, and the classes also have methods belonging to them. A method is a certain single operation that is invoked or called at run-time, in order to change the state or characteristic of an object in its associated class. The interactions among the objects may be quite complex, due to powerful OO features such as encapsulation, information hiding, polymorphism and inheritance. Encapsulation is modeling and storing, with an object, the attributes and methods or operations that the object is capable of performing. In information hiding, only the operations of a particular object can be used to access private components of the particular object. As a result of the above OO features, several member functions, or method calls, can be invoked to achieve an intended functionality, wherein the member functions or method calls may be from different object classes. In object-oriented programming, polymorphism is the characteristic of being able to assign a different meaning or usage to something in different contexts—specifically, to allow an entity such as a variable, a function, or an object to have more than one form
All reversed engineering environment need tools for extracting the information to be analyzed. Static information includes software artifacts and their relations. In JAVA™, for example, such artifacts may be classes, interfaces, methods and variables. The relations might include extension relationships between classes or interfaces, and calls between methods. Dynamic information contains software artifacts as well, and in addition contains sequential event trace information, information about current behavior and code convergence. Static information can be extracted, for example, by using parser-based grammars. For extracting dynamic information, a debugger, profilers, or event recorders can be used.
Extracted information of the above type is not useful unless it can be shown in a readable and descriptive way. Accordingly, program comprehension, by building graphical or viewable design models from existing software, has been supported in many reverse engineering and design recovery tools and environments. There are generally three kinds of views that can be used to illustrate the extracted information, i.e., static, dynamic and merged views, respectively. A static view contains only static information and a dynamic view contains only dynamic information. A merged view is used to show both static and dynamic information in a single view. A merged view is useful, as it provides a connection between static and dynamic information. However, because of polymorphism and inheritance, a static analysis is not able to extract method information from method calls. On the other hand, building an abstraction for merged views can be difficult, since static and dynamic abstractions usually differ considerably.